{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 示例：轴承故障诊断"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "from torch import nn\n",
    "\n",
    "from fastphm.data.FeatureExtractor import FeatureExtractor\n",
    "from fastphm.data.labeler.FaultLabeler import FaultLabeler\n",
    "from fastphm.data.loader.bearing.XJTULoader import XJTULoader\n",
    "from fastphm.data.processor.RMSProcessor import RMSProcessor\n",
    "from fastphm.entity.Bearing import Fault\n",
    "from fastphm.model.pytorch.PytorchModel import PytorchModel\n",
    "from fastphm.data.stage.BearingStageCalculator import BearingStageCalculator\n",
    "from fastphm.data.stage.fpt.ThreeSigmaFPTCalculator import ThreeSigmaFPTCalculator\n",
    "from fastphm.model.pytorch.basic.CNN import CNN\n",
    "from fastphm.util.Plotter import Plotter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 定义 数据加载器、特征提取器、fpt计算器、eol计算器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG - 17:59:30 >> \n",
      "<< Root directory of dataset: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\n",
      "\tBearing1_1, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_1\n",
      "\tBearing1_2, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_2\n",
      "\tBearing1_3, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_3\n",
      "\tBearing1_4, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_4\n",
      "\tBearing1_5, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_5\n",
      "\tBearing2_1, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\37.5Hz11kN\\Bearing2_1\n",
      "\tBearing2_2, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\37.5Hz11kN\\Bearing2_2\n",
      "\tBearing2_3, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\37.5Hz11kN\\Bearing2_3\n",
      "\tBearing2_4, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\37.5Hz11kN\\Bearing2_4\n",
      "\tBearing2_5, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\37.5Hz11kN\\Bearing2_5\n",
      "\tBearing3_1, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\40Hz10kN\\Bearing3_1\n",
      "\tBearing3_2, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\40Hz10kN\\Bearing3_2\n",
      "\tBearing3_3, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\40Hz10kN\\Bearing3_3\n",
      "\tBearing3_4, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\40Hz10kN\\Bearing3_4\n",
      "\tBearing3_5, location: D:\\data\\dataset\\XJTU-SY_Bearing_Datasets\\40Hz10kN\\Bearing3_5\n"
     ]
    }
   ],
   "source": [
    "data_loader = XJTULoader('D:\\\\data\\\\dataset\\\\XJTU-SY_Bearing_Datasets')\n",
    "feature_extractor = FeatureExtractor(RMSProcessor(data_loader.continuum))\n",
    "fpt_calculator = ThreeSigmaFPTCalculator()\n",
    "stage_calculator = BearingStageCalculator(data_loader.continuum, fpt_calculator)\n",
    "Plotter.DPI = 80"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 获取原始数据、特征数据、阶段数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO - 17:59:30 >> Loading data entity: Bearing1_3\n",
      "INFO - 17:59:34 >> Successfully loaded data entity: Bearing1_3\n"
     ]
    }
   ],
   "source": [
    "bearing = data_loader(\"Bearing1_3\", 'Horizontal Vibration')\n",
    "feature_extractor(bearing)\n",
    "stage_calculator(bearing)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 生成训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "fault_types = [Fault.NC, Fault.OF, Fault.IF, Fault.CF]\n",
    "labeler = FaultLabeler(2048, fault_types, is_onehot=False)\n",
    "dataset = labeler(bearing)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 通过其他轴承增加训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO - 17:59:34 >> Loading data entity: Bearing1_1\n",
      "INFO - 17:59:36 >> Successfully loaded data entity: Bearing1_1\n",
      "INFO - 17:59:36 >> Loading data entity: Bearing1_4\n",
      "INFO - 17:59:38 >> Successfully loaded data entity: Bearing1_4\n",
      "INFO - 17:59:38 >> Loading data entity: Bearing2_1\n",
      "INFO - 17:59:48 >> Successfully loaded data entity: Bearing2_1\n",
      "INFO - 17:59:48 >> Loading data entity: Bearing1_2\n",
      "INFO - 17:59:51 >> Successfully loaded data entity: Bearing1_2\n",
      "INFO - 17:59:51 >> Loading data entity: Bearing2_3\n",
      "INFO - 18:00:02 >> Successfully loaded data entity: Bearing2_3\n"
     ]
    }
   ],
   "source": [
    "for bearing_name in ['Bearing1_1', 'Bearing1_4', 'Bearing2_1', 'Bearing1_2', 'Bearing2_3']:\n",
    "    bearing_train = data_loader(bearing_name, 'Horizontal Vibration')\n",
    "    feature_extractor(bearing_train)\n",
    "    stage_calculator(bearing_train)\n",
    "    another_dataset = labeler(bearing_train)\n",
    "    dataset.append(another_dataset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 划分训练集与测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "train_set, test_set = dataset.split(0.7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 定义模型并训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO - 18:00:03 >> \n",
      "<< Successfully initialized model:\n",
      "\tclass: CNN\n",
      "\tdevice: cuda\n",
      "\tdtype: torch.float32\n",
      "INFO - 18:00:03 >> \n",
      "<< Start training model:\n",
      "\tloss function: CrossEntropyLoss\n",
      "\toptimizer: Adam\n",
      "\tlearning rate: 0.001\n",
      "\tweight decay: 0.01\n",
      "\tbatch size: 128\n",
      "DEBUG - 18:00:03 >> Epoch 1/10, Loss: 0.2627304717\n",
      "DEBUG - 18:00:04 >> Epoch 2/10, Loss: 0.0955806038\n",
      "DEBUG - 18:00:04 >> Epoch 3/10, Loss: 0.0776292867\n",
      "DEBUG - 18:00:04 >> Epoch 4/10, Loss: 0.0697132683\n",
      "DEBUG - 18:00:05 >> Epoch 5/10, Loss: 0.0611560182\n",
      "DEBUG - 18:00:05 >> Epoch 6/10, Loss: 0.0553952330\n",
      "DEBUG - 18:00:05 >> Epoch 7/10, Loss: 0.0541260317\n",
      "DEBUG - 18:00:06 >> Epoch 8/10, Loss: 0.0550565684\n",
      "DEBUG - 18:00:06 >> Epoch 9/10, Loss: 0.0512620541\n",
      "DEBUG - 18:00:06 >> Epoch 10/10, Loss: 0.0414896241\n",
      "INFO - 18:00:06 >> Model training completed!!!\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 560x384 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = PytorchModel(CNN(2048, len(fault_types)))\n",
    "model.train(train_set, 10, weight_decay=0.01, criterion=nn.CrossEntropyLoss())\n",
    "Plotter.loss(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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iIgF5NcaiQoVKtCgQQNWrlwJwPr16/Hw8MDLyytduerVq/Ptt99y584dADZv3kzdunWzrF/XkRAREbGEfLyMRFhYGP7+/rz66qu4uroSHh4OwPDhw+nZsyc9e/ZkzJgxnDx5knr16uHo6IibmxuhoaFZ1m0wGo3GvO5AXijWYJylmyCZSNi70NJNkHu4WyDf6bavgH4E2zyXonmfsK88+vMc13F+ce9caEnOaGpDREREzKapDREREQuwlUtkK5AQERGxAAUSIiIiYj7biCO0RkJERETMp4yEiIiIBWhqQ0RERMymQEJERETMZiuBhNZIiIiIiNmUkRAREbEAW8lIKJAQERGxBNuIIwpuIHF139uWboJkokzLiZZugtzD77vnW7oJkikb+Wsi/5mtZCS0RkJERETMVmAzEiIiIgWZrWQkFEiIiIhYgI3EEQokRERELMFWMhJaIyEiIiJmU0ZCRETEAmwkIaFAQkRExBJsZWpDgYSIiIgF2EgcoUBCRETEEuzsbCOS0GJLERERMZsyEiIiIhagqQ0RERExmxZbioiIiNlsJI7QGgkRERExnzISIiIiFqCpDRERETGbAgkRERExm43EEVojISIiIuZTRkJERMQCNLUhIiIiZrOROEKBhIiIiCXYSkZCayRERETEbMpIiIiIWICNJCQUSIiIiFiCrUxtKJAQERGxABuJI7RGQkRERMynjISIiIgFaGpDREREzGYjcYQCCREREUuwlYyE1kiIiIiI2ZSREBERsQAbSUgokBAREbEEW5naUCAhIiJiATYSRyiQEBERsQRbyUhosaWIiIiYTRkJERERC7CVjIQCCREREQuwkTgif6Y27ty5w5QpU/Dy8qJOnTp4e3uzfPlyAKKiorC3t8fHx8e0hYaG5kezcs25c1E89eQAenbvzKD+fkRGRmRaLuLUbwzzH0Jv36709u3K9q3fAHD37l3mv/4aT/TsRt/evgx/egjR0ecAOB8bw+CBfXmiV3feX/K/38uZ06cZP3ZU3neugOnY7EF+WD6e/asC2bHsObxrugOw84Nx7F35PHtXPs/BNRNJ3D+ful7umdYxsGsD9q0K5OCaiXz5bgBVKpYCoIiTA5++4c+RdVPYtyqQzYtGUt2jrOm4RS/6cWD1C3z13ihcnYuant/w1nAeqFz23y9TqP39nvHt1plB/e79nvls/Vp8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",
      "text/plain": [
       "<Figure size 560x384 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "'Accuracy of Fault Diagnosis'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = model.test(test_set)\n",
    "Plotter.diagnosis_confusion_matrix(test_set, result, types=fault_types)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}